#include <iostream>
#include <string>
#include <memory>
#include <jsoncpp/json/json.h>

int main()
{
    Json::Value root;
    root["name"] = "kobe";
    root["age"] = 41;
    root["sex"] = "male";
    root["high"] = 1.98;

    //Json对象中也可以套一个Json对象
    // Json::Value root1;
    // root1["champion"] = 5;
    // root1["byname"] = "Black Mamba";

    // root["honour"] = root1;

    // 序列化
    // 方法一：
    //  std::string s = root.toStyledString();
    //  std::cout << s << std::endl;

    // 方法二:
    //  Json::StreamWriterBuilder sw;
    //  std::unique_ptr<Json::StreamWriter> w (sw.newStreamWriter());
    //  std::stringstream ss;
    //  w->write(root, &ss);
    //  std::cout << ss.str() << std::endl;

    // 方法三:
    //  Json::FastWriter w;//网络传递时使用
    Json::StyledWriter w; // 日常使用, 可读性好
    std::string s = w.write(root);
    std::cout << s;

    //反序列化
    Json::Value droot;
    Json::Reader r;
    r.parse(s, droot);//将s中的内容反序列化到droot中
    
    std::string name = droot["name"].asString();
    int age = droot["age"].asInt();
    std::string sex = droot["sex"].asString();
    float high = droot["high"].asFloat();

    std::cout << name << std::endl;
    std::cout << age << std::endl;
    std::cout << sex << std::endl;
    std::cout << high << std::endl;

    return 0;
}